package com.kgcx.common.exception;

/**
 * 错误枚举的接口类
 * 各业务系统可以通过实现该枚举接口来定义错误码，具体可参考CoreErrors定义规则
 * Created by panjin on 2017/11/27.
 */
public interface IErrors<T> {

    /**
     * 采用枚举中定义的message作为返回信息
     *
     * @return
     */
    public T parse();

    /**
     * 采用枚举中定义的message作为返回信息，并传递一些参数
     *
     * @param args
     *            具体参数列表
     * @return
     */
    public T parse(Object... args);

    /**
     * 采用枚举中定义的code，使用自定义的message作为返回信息，并可能会带上一些参数
     *
     * @param message
     *            错误信息
     * @param args
     *            具体参数列表
     * @return
     */
    public T parseMsg(String message, Object... args);

    /**
     * 采用枚举中定义的message作为异常的信息
     *
     * @return
     */
    public BaseException exp();

    /**
     * 采用枚举中定义的message作为异常信息，并传递一些参数
     *
     * @param args
     *            参数列表
     * @return
     */
    public BaseException exp(Object... args);

    /**
     * 采用枚举中定义的message作为异常信息，并传递一些参数，支持传入底层的异常
     *
     * @param cause
     *            原始异常
     * @param args
     *            参数列表
     * @return
     */
    public BaseException exp(Throwable cause, Object... args);

    /**
     * 采用枚举中定义的code，使用自定义的message作为异常信息，并可能会带上一些参数
     *
     * @param message
     *            错误信息
     * @param args
     *            具体参数列表
     * @return
     */
    public BaseException expMsg(String message, Object... args);

    /**
     * 采用枚举中定义的code，使用自定义的message作为异常信息，并可能会带上一些参数，并自持传入底层的异常
     *
     * @param message
     *            错误信息
     * @param cause
     *            原始异常
     * @param args
     *            具体参数列表
     * @return
     */
    public BaseException expMsg(String message, Throwable cause, Object... args);
}
